﻿using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace UIOC.CodeAnalysis.Extensions;

internal static class TypeDeclarationSyntaxExtensions {

    /// <summary>
    /// 获取类的完整名称（包括泛型参数）
    /// </summary>
    public static string GetDeclaraionName(this TypeDeclarationSyntax typeDeclaration) {
        // 获取类名（不含泛型参数）
        string className = typeDeclaration.Identifier.Text;

        // 检查是否为泛型类
        if (typeDeclaration.TypeParameterList != null &&
            typeDeclaration.TypeParameterList.Parameters.Count > 0) {
            // 获取所有泛型参数名（如 T1, T2）
            var typeParameters = typeDeclaration.TypeParameterList.Parameters
                .Select(p => p.Identifier.Text);

            // 组合为 "ClassName<T1, T2>" 形式
            return $"{className}<{string.Join(", ", typeParameters)}>";
        }

        // 非泛型类直接返回类名
        return className;
    }
}
